package com.xyzwps.orm.ktorm.repository

import com.xyzwps.orm.model.Tag
import me.liuwj.ktorm.database.Database
import me.liuwj.ktorm.entity.Entity
import me.liuwj.ktorm.entity.sequenceOf
import me.liuwj.ktorm.schema.Table
import me.liuwj.ktorm.schema.int
import me.liuwj.ktorm.schema.varchar

// 吐槽，本来直接编一个叫 Tag 的接口就好了，这里非要搞什么非侵入式……
interface TagEntity : Entity<TagEntity> {

    companion object : Entity.Factory<TagEntity>()

    val tagId: Int
    var tagName: String
    var userId: Int

    fun toTag(): Tag {
        val tag = Tag()
        tag.tagId = this.tagId
        tag.userId = this.userId
        tag.tagName = this.tagName
        return tag
    }
}

object TagTable : Table<TagEntity>("tag") {
    val tagId = int("tag_id").bindTo { it.tagId }.primaryKey()
    val tagName = varchar("tag_name").bindTo { it.tagName }
    val userId = int("user_id").bindTo { it.userId }
    // TODO: 表示联合唯一键
}

val Database.tags get() = this.sequenceOf(TagTable)
